package day01;

/**
 * 位图（bitmap）：
 * 用于表示一组布尔值（或是/否、0/1）的集合
 * 非常适合用来管理大量布尔状态的数据，因为它在内存中占用的空间极小
 * 比如：管理100万个布尔值仅需要 125K 的内存
 * 使用场景：
 * 垃圾回收算法，布隆过滤器
 */
public class Bitmap {
    //创建一个byte数组
    private byte[] bits;
    //定义一个变量表示数组大小
    private int size;

    /**
     * 构造函数，用于指定位图的大小（比特位的数量）
     * 1byte = 8bit
     *
     * @param size
     */
    public Bitmap(int size) {
        this.size = size;
        this.bits = new byte[(size + 7) / 8];
    }

    /**
     * 设置某个位置为1
     *
     * @param index
     */
    public void set(int index) {
        if (index < 0 || index >= size){
            throw new IndexOutOfBoundsException("索引越界！");
        }
        bits[index / 8] |= (1 << (index % 8));
    }
}
